﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using DynamicAuditor.DTOs;

namespace DynamicAuditor.DALAuditor
{

    /// <summary>
    /// Fecha: 01-Octubre-2010
    /// Autor:Kenneth Bogantes F
    /// Descripcion: En esta clase se va a manejar todas las operaciones correspondientes a DOMINIOS COBIT tales como: Insercion, Actualizacion, Eliminacion
    /// y todo lo relaciona con DOMINIOS.
    /// </summary>
    public class clsDepartamentoMg
    {


        //Declaracion de la varaiable tipo datacontext que vamos a utilizar en toda la clase.
        DynamicAuditorDataContext bd = new DynamicAuditorDataContext();

        /// <summary>
        /// Init constructor of clsDepartamentoMG.
        /// </summary>
        public clsDepartamentoMg()
        {

        }



        #region Funciones_Basicas_Mantenimientos



        public int InsertDepartamentos(DTOs.dtoDepartamento departamento)
        {
            //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0

            int x = 0;
            DEPARTAMENTO dep = new DEPARTAMENTO();

            try
            {
                dep.Nombre = departamento.Nombre;
                dep.Detalle = departamento.Detalle;
                dep.Codigo = departamento.Codigo;
                dep.Activo = departamento.Activo;
                //Se procede a insertar la informacion del departamento
                bd.DEPARTAMENTOs.InsertOnSubmit(dep);
                bd.SubmitChanges();
                x = 1;
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo insertar el departamento. " + ex.Message);
                
            }          
            return x;
        }




        public int UpdateDepartamentos(DTOs.dtoDepartamento departamento)
        {
            //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0

            int x = 0;
           

            try
            {

                DEPARTAMENTO dep = bd.DEPARTAMENTOs.Single(p => p.idDepartamento == departamento.Iddepartamento);
                dep.Nombre = departamento.Nombre;
                dep.Detalle = departamento.Detalle;
                dep.Codigo = departamento.Codigo;
                dep.Activo = departamento.Activo;              
                bd.SubmitChanges();
                x = 1;
            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error actualizando los datos . " + ex.Message);
            }
            return x;
        }


        public int DeleteDepartamento(DTOs.dtoDepartamento departamento)
        {
            //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0

            int x = 0;

            try
            {

                var dep = bd.DEPARTAMENTOs.Single(p => p.idDepartamento == departamento.Iddepartamento);

                bd.DEPARTAMENTOs.DeleteOnSubmit(dep);
                bd.SubmitChanges();
                x = 1;
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo borrar el departamento " + ex.Message);
                
            }
           
            return x;

        }


        public DTOs.dtoDepartamento ObtenerDepartamientoporId(int iddepartamento)
        {
            DTOs.dtoDepartamento depart = new DynamicAuditor.DTOs.dtoDepartamento();

            try
            {
                DEPARTAMENTO depa = bd.DEPARTAMENTOs.Single(p => p.idDepartamento == iddepartamento);



                depart.Iddepartamento = depa.idDepartamento;
                depart.Nombre = depa.Nombre;
                depart.Detalle = depa.Detalle;
                depart.Codigo = int.Parse ( depa.Codigo.ToString ());
                depart.Activo = bool.Parse(depa.Activo.ToString());
                          

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error obteniendo los datos. " + ex.Message);
            }

            return depart;
        }




        public List<DTOs.dtoDepartamento> ObtenerDepartamentos()
        {
            int i = 0;
            List<DTOs.dtoDepartamento> listaDepas = new List<DTOs.dtoDepartamento>();

            try
            {
                var depas = (from p in bd.DEPARTAMENTOs
                          
                           orderby p.Nombre
                           select p
                           
                           ).ToList();

                foreach (DEPARTAMENTO oneDepa in depas)
                {
                    listaDepas.Add(new dtoDepartamento());
                    listaDepas[i].Iddepartamento = oneDepa.idDepartamento;
                    listaDepas[i].Nombre = oneDepa.Nombre;
                    listaDepas[i].Detalle = oneDepa.Detalle;
                    listaDepas[i].Codigo = int.Parse(oneDepa.Codigo.ToString());
                    listaDepas[i].Activo = bool.Parse(oneDepa.Activo.ToString());
                    i++;
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error obteniendo los datos. " + ex.Message);
            }


            return listaDepas;
        }



        public List<DTOs.dtoDepartamento> ObtenerDepartamentosActivos()
        {
            int i = 0;
            List<DTOs.dtoDepartamento> listaDepas = new List<DTOs.dtoDepartamento>();

            try
            {
                var depas = (from p in bd.DEPARTAMENTOs
                             where p.Activo == true
                             orderby p.Nombre
                             select p

                           ).ToList();

                foreach (DEPARTAMENTO oneDepa in depas)
                {
                    listaDepas.Add(new dtoDepartamento());
                    listaDepas[i].Iddepartamento = oneDepa.idDepartamento;
                    listaDepas[i].Nombre = oneDepa.Nombre;
                    listaDepas[i].Detalle = oneDepa.Detalle;
                    listaDepas[i].Codigo = int.Parse(oneDepa.Codigo.ToString());
                    listaDepas[i].Activo = bool.Parse(oneDepa.Activo.ToString());
                    i++;
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error obteniendo los datos. " + ex.Message);
            }


            return listaDepas;
        }









        #endregion






    }
}
